package atm;

import java.text.SimpleDateFormat;
import java.util.Date;

import domain.Bcard;

/**
 * 
     * @ClassName: Transfer
     * @Description: TODO描述  转账
     * @author Huang_shengjun
     * @date 2020年5月20日 下午6:12:55
     *
 */
public class Transfer extends Transaction{

	public static final int TRANS_UNSTART = 1; // 未开始
	public static final int TRANS_GETDATA = 2; // 获取交易请求
	public static final int TRANS_SUCCESS = 3; // 交易成功
	public static final int TRANS_FAILURE = 4; // 交易失败
	public static final int TRANS_EXIT = 4; // 退出
	Bcard cardDao = Bcard.bcard();
	
	public Transfer(Session session, Bcard bcard) {
		super(session,bcard);
		// 当选择取款交易时,需要改变显示屏的显示,需要改变数字键盘的状态
		ATM machine = ATM.getInstance();
		machine.getDisplay().setText("请输入需转入的卡号：");
		machine.getDigitButton().stateChange(1, 0, "TransferServlet");
	}
	
	/**
	 * 查询是否存在卡号
	 */
	public void TransferIsCard() {
		String ret = cardDao.isCard(this.getTcardNo());
		ATM machine = ATM.getInstance();
		System.out.println("==this.getTcardNo() != cardDao.getbCardId()"+this.getTcardNo() + cardDao.getbCardId());
		// 卡号存在
		if(ret != null) {
			if (this.getTcardNo().equals(cardDao.getbCardId())) {
				this.setState(TRANS_FAILURE);// 4  交易失败
				machine.getDisplay().setText("卡号不正确，请重新操作！"+"<br>"+"确定:1");
				machine.getDigitButton().stateChange(0, 0, "TransferPrintServlet");
			}else {
				// 显示屏更新 数字键盘状态更新 
				this.setState(TRANS_SUCCESS);
				machine.getDisplay().setText("请输入需转入的金额：");
				machine.getDigitButton().stateChange(1, 0, "TransferInfoServlet");
			}
		}
		// 卡号不存在
		else {
			this.setState(TRANS_FAILURE);// 4  交易失败
			machine.getDisplay().setText("卡号不正确，请重新操作！"+"<br>"+"确定:1");
			machine.getDigitButton().stateChange(0, 0, "TransferPrintServlet");
		}
	}
	
	public void TransferMoney() {
		ATM machine = ATM.getInstance();
		if (this.getAmount() <= cardDao.getbBalance()) {
			String ret = cardDao.transferMoney(this.getTcardNo(),this.getAmount());
			if(ret != null) {
				if(this.getAmount() > 0) {
					// 显示屏更新 数字键盘状态更新 
					this.setState(TRANS_SUCCESS);
					machine.getDisplay().setText("转账成功。你的余额是"+cardDao.getbBalance()+"<br>"+"打印:0 不打印:1");
					machine.getDigitButton().stateChange(0, 0, "TransferPrintServlet");
				}else {
					this.setState(TRANS_FAILURE);//  
					machine.getDisplay().setText("转账失败，请输入大于0金额，重新操作！"+"<br>"+"确定:1");
					machine.getDigitButton().stateChange(0, 0, "TransferPrintServlet");
				}
			}else {
				this.setState(TRANS_FAILURE);//  
				machine.getDisplay().setText("转账失败，请重新操作！"+"<br>"+"确定:1");
				machine.getDigitButton().stateChange(0, 0, "TransferPrintServlet");
			}
		}else {
			this.setState(TRANS_FAILURE);//  
			machine.getDisplay().setText("金额不符合，请重新操作！"+"<br>"+"确定:1");
			machine.getDigitButton().stateChange(0, 0, "TransferPrintServlet");
		}
	}
	
	
	/**
	 * 处理打印
	 * @param flag 0:打印 1:不打印
	 */
	public void print3(int flag) {
		// 显示屏更新 数字键盘状态更新 
		this.setState(TRANS_EXIT);
		this.getSession().setState(Session.CHOOSING);
		ATM machine = ATM.getInstance();
		if (flag == 0) {
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
			//利用html换行符  &#10;  或  &#13; 
			machine.getArea().setText("************收据************&#10;&#10;&#10;"
					
									+ "**********转账账户**********&#13;"
									+ "账户："+this.getTcardNo()+"&#10;"
					
									+ "**********转账金额**********&#13;"
									+ "金额："+this.getAmount()+"&#10;"
									
									+ "************余额************&#13;"
									+ "余额："+cardDao.getbBalance()+"&#10;"
									
									+ "************时间************&#13;"
									+ df.format(new Date())+"&#10;&#10;&#10;"   //Date获取当前时间
								
									+ "************收据************&#10;");
		}
		machine.getDisplay().setText("请选择业务 1:取款 2:存款 3:查询余额 4:转账 5:代缴费 6:修改密码   0:退出 ");
		machine.getDigitButton().stateChange(0, 0, "TransactionServlet");
	}
	

}
